#include<cstdio>
#include<cstring>
#include<cmath>
#define check(i) i-p[0] && i-p[1] && i-p[2]
int p[3],m[3],t[3],ans,dep;
bool f[48][48][48][8][8];
void dfs(int *p,int x,int y)
{
bool &res=f[p[0]][p[1]][p[2]][x][y]; if (res) return; res=1;
int far=0,near=50;
for (int i=0;i<3;i++){
if (p[i]<45 && p[i]>far) far=p[i];
if (p[i]<near) near=p[i];
}
if (far>ans) ans=far;
for (int j=0;j<3;j++) {
int q[3]={p[0],p[1],p[2]},z=1<<j;
if (p[j]>=45){
int T=p[j]-45;
for (int i=p[T]+t[T];p[T]<45 && i>=p[T]-t[T] && i>near-2 && i;i--)
if (check(i)) q[j]=i,dfs(q,x,y);
}
else if (check(j+45)){
if (y&z) for (int i=0;i<3;i++) if (fabs(p[i]-p[j])==1)
q[i]=45+j,dfs(q,x,y^z),q[i]=p[i];
if (x&z) for (int i=p[j]+m[j];i>=p[j]-m[j] && i>near-2 && i;i--)
if (check(i)) q[j]=i,dfs(q,x^z,y);
}
}
}
int main()
{
for (int i=0;i<3;i++) scanf("%d%d%d",p+i,m+i,t+i);
dfs(p,7,7); printf("%d\n",ans); return 0;
}
232. Implement Queue using Stacks | 844. Backspace String Compare |
20. Valid Parentheses | 746. Min Cost Climbing Stairs |
392. Is Subsequence | 70. Climbing Stairs |
53. Maximum Subarray | 1527A. And Then There Were K |
1689. Partitioning Into Minimum Number Of Deci-Binary Numbers | 318. Maximum Product of Word Lengths |
448. Find All Numbers Disappeared in an Array | 1155. Number of Dice Rolls With Target Sum |
415. Add Strings | 22. Generate Parentheses |
13. Roman to Integer | 2. Add Two Numbers |
515. Find Largest Value in Each Tree Row | 345. Reverse Vowels of a String |
628. Maximum Product of Three Numbers | 1526A - Mean Inequality |
1526B - I Hate 1111 | 1881. Maximum Value after Insertion |
237. Delete Node in a Linked List | 27. Remove Element |
39. Combination Sum | 378. Kth Smallest Element in a Sorted Matrix |
162. Find Peak Element | 1529A - Eshag Loves Big Arrays |
19. Remove Nth Node From End of List | 925. Long Pressed Name |